#ifndef FORMATOUTPUT_H_
#define FORMATOUTPUT_H_

#include <sstream>
using namespace std;

class Unit;

class FormatOutput
{
public:
    virtual void output(ostream& os_io, const int& baseValue_i, Unit* unit_i) = 0; 
    
    static void eachPrint(ostream& os_io, int& value_io, Unit& unit_i, bool& addNull_io);
    static void zeroPrint(ostream& os_io, Unit& unit_i);
    static void basePrint(ostream& os_io, const int& value_i, Unit& unit_i);

protected:
    FormatOutput(){}
};



class StdOutput : public FormatOutput
{
public:
    virtual void output(ostream& os_io, const int& baseValue_i, Unit* unit_i);
    
    static StdOutput& getStdOutput();   
};

 
class BasicUnitOutput : public FormatOutput
{
public:
    virtual void output(ostream& os_io, const int& baseValue_i, Unit* unit_i);

    static BasicUnitOutput& getBasicUnitOutput();
};

#define STDOUTPUT (&StdOutput::getStdOutput())
#define BASICUNITOUTPUT  (&BasicUnitOutput::getBasicUnitOutput())


#endif /* FORMATOUTPUT_H_ */
